package com.ruoyi.oto.tagmatcher.enums;

import com.ruoyi.oto.constants.TagType;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public enum TagMatcherNodeOpt {

    /**
     * 等于
     */
    EQUAL("=", "等于"),
    /**
     * 不等于
     */
    NEQUAL("<>","不等于"),
    /**
     * 大于
     */
    GT(">", "大于"),
    /**
     * 大于等于
     */
    GE(">=", "大于等于"),
    /**
     * 小于
     */
    LT("<", "小于"),
    /**
     * 小于等于
     */
    LE("<=", "小于等于"),
    /**
     * 区间
     */
    BETWEEN("between","区间"),
    /**
     * 左模糊
     */
    LLIKE("like","左模糊"),
    /**
     * 右模糊
     */
    RLIKE("like","右模糊"),
    /**
     * 左右模糊
     */
    LIKE("like","左右模糊");


    private String code;

    private String desc;

    /**
     * 拼接查询条件的值
     * @param opt
     * @param val
     * @return
     */
    public static String spliceQueryCondition(TagMatcherNodeOpt opt, String val, int tagType){
        if(opt.equals(EQUAL) || opt.equals(NEQUAL) || opt.equals(GT) || opt.equals(GE)
         || opt.equals(LT) || opt.equals(LE)){
            if(TagType.数字==tagType){
                return val+"+0";  //数字转换
            }
            return "'"+val+"'";
        }
        else if(opt.equals(BETWEEN)){
            String[] s = val.split("___");
            if(s.length!=2){
                return null;
            }
            else {
                if(TagType.数字==tagType){
                    return s[0]+"+0 and 0+"+s[1];
                }
                return "'"+s[0]+"' and '"+s[1]+"'";
            }
        }
        else if(opt.equals(LLIKE)){
            return "'%"+val+"'";
        }
        else if(opt.equals(RLIKE)){
            return "'"+val+"%'";
        }
        else if(opt.equals(LIKE)){
            return "'%"+val+"%'";
        }
        return val;
    }

    /**
     * 根据名称获取对应的枚举
     * @param name
     * @return
     */
    public static TagMatcherNodeOpt getByName(String name) {
        for (TagMatcherNodeOpt opt : TagMatcherNodeOpt.values()) {
            if (opt.name().equals(name)) {
                return opt;
            }
        }
        return null;
    }
    /**
     * 根据名称获取对应的枚举
     * @param desc
     * @return
     */
    public static TagMatcherNodeOpt getByDesc(String desc) {
        for (TagMatcherNodeOpt opt : TagMatcherNodeOpt.values()) {
            if (opt.getDesc().equals(desc)) {
                return opt;
            }
        }
        return null;
    }
}
